home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
strbrk.arc
/
KEYSCAN.ASM
< prev
Wrap
Assembly Source File
|
1985-11-20
|
3KB
|
74 lines
COMMENT " Routine KEYSCAN returns scan code and ASCII code
(if any) for each keystroke, until Ctrl-Brk.
Author: Ted Mirecki June 1984
"
ASMUTIL SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:ASMUTIL, DS:ASMUTIL
ORG 100H
KEYSCAN PROC
JMP SHORT PASTDATA
KEYCODE DB ?,?,?,?,0DH,0AH,'$'
MSG DB 'Strike any key, Ctrl-Break to exit',0DH,0AH
DB '$'
PASTDATA: MOV DX,OFFSET MSG ;ISSUE SIGN-ON MESSAGE
MOV AH,9
INT 21H
GETKB: SUB AX,AX ;READ THE KEYBOARD
INT 16H ;WAIT FOR KEYSTROKE
MOV DI,OFFSET KEYCODE ;POINT TO CHAR AREA
CALL AX2HEX
MOV DX,OFFSET KEYCODE ;DISPLAY HEX CHARACTERS
MOV AH,9
INT 21H
JMP GETKB ;GO GET NEXT KEYSTROKE
KEYSCAN ENDP
ASMUTIL ENDS
COMMENT " Routine AX2HEX converts value in AX to 4 hex chars.
Author: Ted Mirecki January 1984
INPUT: Value to be converted in AX.
ES:DI points to buffer to receive characters
(Length 4 bytes).
OUTPUT: 4 hex characters (0 - F) in output buffer.
DI points 1 byte past last character.
AX destroyed, other regs unchanged.
"
ASMUTIL SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:ASMUTIL
AX2HEX PROC NEAR
PUBLIC AX2HEX
CLD ;GO FORWARD THRU STRINGS
PUSH BX ;SAVE RESGISTERS
PUSH CX
PUSH DX
MOV BX,OFFSET HEX ;POINT TO HEX DIGIT CHARS
MOV CX,4 ;WILL HANDLE 4 NIBBLES
NEXTNIBL: ROL AX,1 ;HI-ORDER NIBBLE TO
ROL AX,1 ;LO-ORDER OF AX
ROL AX,1
ROL AX,1
MOV DX,AX ;SAVE IT IN DX
AND AL,0FH ;ISOLATE LOW-ORDER NIBBLE
XLAT CS:HEX ;TRANSLATE TO HEX DIGIT
STOSB ;PUT HEX DIGIT INTO OUTPUT
MOV AX,DX ;RECOVER AX VALUE
LOOP NEXTNIBL ;REPEAT FOR 4 NIBBLES
POP DX ;RESTORE REGS & EXIT
POP CX
POP BX
RET
AX2HEX ENDP
HEX DB '0123456789ABCDEF'
ASMUTIL ENDS
END KEYSCAN